AWS CLIを使用してS3でDataSyncをしてみた。
概要
DataSyncでAWSストレージサービス間、およびオンプレミスストレージシステムとAWSストレージサービス間でデータを移動できます。この記事では、AWS CLIを使用してS3でDataSyncをしてみました。ここでは、AWS CLIでDataSyncを使用して、ソースS3バケットから別のリージョンのデスティネーションS3バケットにデータを移動してみました。
やってみた
S3バケットの作成
- 2つのS3バケットを作成しておきます。
- ソースS3バケット : us-east-1 リージョン
- デスティネーションS3バケット : us-east-2 リージョン
- 次のコマンドを使用して、us-east-1リージョンにS3バケットを作成しておきます。
//create a S3 bucket in us-east-1 region aws s3api create-bucket \ --bucket datasync-source-data-bucket \ --region us-east-1 //Output { "Location": "/datasync-source-data-bucket" }
- 次のコマンドを使用して、「us-east-1」リージョンの外側にバケットを作成しておきます。
//create a S3 bucket outside of the 'us-east-1' region aws s3api create-bucket \ --bucket datasync-destination-data-bucket \ --region us-east-2 \ --create-bucket-configuration LocationConstraint=us-east-2 //Output { "Location": "http://datasync-destination-data-bucket.s3.amazonaws.com/" }
- ソースS3バケットにファイルをアップロードしておきます。
- 初期状態では、デスティネーションバケットは空です。
IAMロールの作成
- DataSyncがS3バケットへのアクセスに必要なIAMロールを引き受けることを許可するIAMポリシーを作成します。
- 以下のポリシーを含むjsonファイルを作成しておきます。
//create assumeRole.json file { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "datasync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- 次のコマンドを使用して、上記のポリシーでIAMロールを作成しておきます。
//create IAM role aws iam create-role --role-name "s3accessRole" --assume-role-policy-document file://assumeRole.json //Output { "Role": { "Path": "/", "RoleName": "s3accessRole", "RoleId": "......", "Arn": "arn:aws:iam::xxxxxxxxxxx:role/s3accessRole", "CreateDate": "2022-04-24T03:45:15+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "datasync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
- [AmazonS3FullAccess]ポリシーをIAMロールにアタッチしておきます。
aws iam attach-role-policy \ --role-name s3accessRole \ --policy-arn 'arn:aws:iam::aws:policy/AmazonS3FullAccess'
DataSyncロケーションの作成
- 次の設定でソースバケットのDataSyncロケーションを作成しておきます。
- s3-bucket-arn : ソースバケットArnを指定します。
- s3-storage-class : STANDARD
- s3-config : 前に作成したIAMロールのArn。
- region : us-east-1
//create S3 location aws datasync create-location-s3 \ --s3-bucket-arn 'arn:aws:s3:::datasync-source-data-bucket' \ --s3-storage-class 'STANDARD' \ --s3-config 'BucketAccessRoleArn=arn:aws:iam::xxxxxxxxxxx:role/s3accessRole' \ --region us-east-1 //Output { "LocationArn": "arn:aws:datasync:us-east-1:xxxxxxxxxxxxx:location/loc-000000000000001" }
- 次の設定でデスティネーションバケットのDataSyncロケーションを作成しておきます。
- s3-bucket-arn : デスティネーションバケットArnを指定します。
- s3-storage-class : STANDARD
- s3-config : 前に作成したIAMロールのArn。
- region : us-east-2
//create S3 location aws datasync create-location-s3 \ --s3-bucket-arn 'arn:aws:s3:::datasync-destination-data-bucket' \ --s3-storage-class 'STANDARD' \ --s3-config 'BucketAccessRoleArn=arn:aws:iam::xxxxxxxxxx:role/s3accessRole' \ --region us-east-2 //Output { "LocationArn": "arn:aws:datasync:us-east-2:xxxxxxxxxxxx:location/loc-000000000000002" }
DataSyncタスクの作成
- 次のコマンドを使用してタスクを作成しておきます。コマンドでソースとデスティネーションのロケーションArnを指定します。
aws datasync create-task \ --source-location-arn 'arn:aws:datasync:us-east-1:xxxxxxxxxxxx:location/loc-000000000000001' \ --destination-location-arn 'arn:aws:datasync:us-east-2:xxxxxxxxxxxx:location/loc-000000000000002' \ --name datasync-task \ --region us-east-1
タスク実行を開始する
- 次のコマンドを使用して、タスクの実行を開始します。タスクの実行が開始されると、データはソースバケットからデスティネーションバケットにコピーされます。
aws datasync start-task-execution \ --task-arn 'arn:aws:datasync:us-east-1:xxxxxxxxxxxx:task/task-00000000001' \ --region us-east-1
- コンソールで、データがデスティネーションバケットに移動されていることを見ることができます。
まとめ
AWS CLIを使用してS3でDataSyncをしてみました。サポートされている他のAWSサービスでDataSyncを試すことができます。
Reference :